Я какое-то время возился с JSON, просто выталкивал его как текст, и это никому не повредило (насколько я знаю), но я хотел бы начать делать все правильно. Я видел так много предполагаемых «стандартов» для типа содержимого JSON: приложение / json приложение / x-javascript текст / javascript текст / x-javascript текст / x-json Но какой из них правильный или лучший? Я так понимаю, что существуют разные проблемы с безопасностью и поддержкой браузера. Я знаю, что есть аналогичный вопрос: "Какой тип MIME, если JSON возвращается REST API?", Но я хотел бы получить более конкретный ответ.
2020-12-07 21:18:01
1 2 следующий Для текста JSON: приложение / json Тип мультимедиа MIME для текста JSON - application / json. Кодировка по умолчанию - UTF-8. (Источник: RFC 4627). Для JSONP (исполняемый JavaScript) с обратным вызовом: приложение / javascript Вот несколько сообщений блога, которые были упомянуты в соответствующих комментариях: Почему не следует использовать text / html для JSON В Internet Explorer иногда возникают проблемы с application / json Достаточно полный список Mimetypes и для чего их использовать Официальный список типов mime в IANA из ответа @gnrfan ниже | IANA зарегистрировала официальный тип MIME для JSON как application / json. Когда его спросили, почему не text / json, Крокфорд, похоже, ответил, что JSON на самом деле не является ни JavaScript, ни текстом, а также IANA с большей вероятностью раздаст application / *, чем text / *. Дополнительные ресурсы: Типы СМИ Запрос комментариев 4627 bluesmoon: JSON имеет тип | Для JSON: Тип содержимого: приложение / json Для JSON-P: Тип содержимого: приложение / javascript | Конечно, правильный тип носителя MIME для JSON - application / json, но необходимо понимать, какой тип данных ожидается в вашем приложении. Например, я использую Ext GWT, и ответ сервера должен идти как text / html, но содержать данные JSON. Клиентская сторона, слушатель формы Ext GWT uploadForm.getForm (). addListener (новый FormListenerAdapter () { @Override public void onActionFailed (форма формы, int httpStatus, String responseText) { MessageBox.alert («Ошибка»); } @Override public void onActionComplete (форма формы, int httpStatus, String responseText) { MessageBox.alert («Успех»); } }); В случае использования типа ответа application / json браузер предлагает мне сохранить файл. Фрагмент исходного кода на стороне сервера с использованием Spring MVC вернуть новый AbstractUrlBasedView () { @SuppressWarnings ("не отмечено") @Override protected void renderMergedOutputModel (модель карты, запрос HttpServletRequest, HttpServletResponse response) выдает исключение { response.setContentType ("текст / html"); response.getWriter (). написать (json); } }; | JSON: Ответ - это динамически генерируемые данные в соответствии с параметрами запроса, переданными в URL. Пример: {"Name": "Foo", "Id": 1234, "Rank": 7} Тип содержимого: приложение / json JSON-P: JSON с заполнением. Ответ - это данные JSON с обернутым вокруг них вызовом функции. Пример: functionCall ({"Имя": "Foo", "Id": 1234, "Rank": 7}); Тип содержимого: приложение / javascript | Если вы используете Ubuntu или Debian и обслуживаете файлы .json через Apache, вы можете захотеть обслуживать файлы с правильным типом содержимого. Я делаю это в первую очередь потому, что хочу использовать расширение Firefox JSONView. Модуль Apache mod_mime поможет сделать это легко. Однако в Ubuntu вам нужно отредактировать файл /etc/mime.types и добавить строку приложение / json json Затем перезапустите Apache: sudo service apache2 перезапуск | Если вы вызываете веб-службы ASP.NET со стороны клиента, вам необходимо использовать application / json, чтобы он работал. Я считаю, что это то же самое для фреймворков jQuery и Ext. | Правильный тип содержимого для JSON - application / json, ЕСЛИ вы не используете JSONP, также известный как JSON с заполнением, который на самом деле является JavaScript, поэтому правильным типом содержимого будет application / javascript. | Нет сомнений в том, что application / json - лучший тип MIME для ответа JSON. Но у меня был опыт, когда мне приходилось использовать application / x-javascript из-за некоторых проблем со сжатием. Моя среда хостинга - это общий хостинг с GoDaddy. Они не позволяют мне изменять конфигурацию сервера. Я добавил в свой файл web.config следующий код для сжатия ответов.Используя это, страницы .aspx были сжаты с помощью g-zip, но ответы JSON - нет. я добавил в разделах статических и динамических типов. Но это совсем не сжимает ответы JSON. После этого я удалил этот недавно добавленный тип и добавил в разделах статического и динамического типов и изменил тип ответа в .ashx (асинхронный обработчик) в приложение / x-javascript И теперь я обнаружил, что мои ответы JSON были сжаты с помощью g-zip. Поэтому я лично рекомендую использовать приложение / x-javascript только если вы хотите сжать ответы JSON в среде общего хостинга. Потому что на виртуальном хостинге они не позволяют изменять IISконфигурации. | Только при использовании application / json в качестве типа MIME у меня есть следующее (по состоянию на ноябрь 2011 года с самыми последними версиями Chrome, Firefox с Firebug): Больше никаких предупреждений от Chrome при загрузке JSON с сервера. Firebug добавит вкладку в ответ, показывающую данные JSON. отформатирован. Если тип MIME отличается, он будет отображаться как «Содержание ответа». | Не все работает с типом содержимого application / json. Если вы используете отправку формы Ext JS для загрузки файла, имейте в виду, что ответ сервера анализируется браузером для создания документа для